package com.abrindoportas.bsbtour.Test;

import static org.junit.Assert.*;

import java.util.Date;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import com.abrindoportas.bsbtour.cliente.Cliente;
import com.abrindoportas.bsbtour.cliente.ClienteRN;
import com.abrindoportas.bsbtour.util.HibernateUtil;


public class ClienteTest {
	
	private static Session sessao;
	private static Transaction transacao;
	
	@BeforeClass
	public static void abreConexao(){
		sessao = HibernateUtil.getSession().getCurrentSession();
		transacao = sessao.beginTransaction();
	}
	
	@AfterClass
	public static void fechaConexao(){
		
		try {
			transacao.commit();
		} catch (Throwable e) {
			System.out.println("Problema no commit, ou seja, no enviar dos dados" + e.getMessage());
		}finally{
			try {
				if (sessao.isOpen()) {
					sessao.close();
				}
			} catch (Exception e2) {
				System.out.println("Problema no fechamento da sessão!" + e2.getMessage());
			}
		}
	}
	
	@Before
	public void setup(){
		//campos String Nome, Data, String CPF, String email, String endereco, float renda
		Cliente c1 = new Cliente("Edinei Pereira",new Date(),"89698123431","edinei@gmail.com","QR 117 CONJ D CASA 13",3500.00f);
		Cliente c2 = new Cliente("Roberto Souza",new Date(),"89787656743","teste@gmail.com","QR 114 CONJ E CASA 1",300.00f);
		Cliente c3 = new Cliente("Manoel Moreira",new Date(),"56734512323","email_teste@gmail.com","QR 113 CONJ C CASA 3",500.00f);
		Cliente c4 = new Cliente("Carlos Cezar",new Date(),"98712344509","teste_praia@gmail.com","QR 112 CONJ B CASA 23",1500.00f);
		Cliente c5 = new Cliente("Maurício Vivido",new Date(),"98712345678","praia_digital@gmail.com","QR 119 CONJ A CASA 10",4500.00f);
		
		sessao.save(c1);
		sessao.save(c2);
		sessao.save(c3);
		sessao.save(c4);
		sessao.save(c5);
		
	}
		
	@After
    public void limpaBanco(){
            
            ClienteRN clienteRN = new ClienteRN();
            List<Cliente> lista = clienteRN.listar();
            
            for (Cliente cliente : lista) {
                    clienteRN.excluir(cliente);
            }
    }

    @Test
    public void salvarTest() {

            Cliente c1 = new Cliente();

            c1.setNome("Edir Pereira");
            c1.setEndereco("Rua E");
            c1.setRenda(6900f);
            c1.setCpf("89689034512");

            ClienteRN clienteRN = new ClienteRN();

            clienteRN.salvar(c1);

            assertEquals(true, true);

    }
    
    @Test
    public void listarTest(){
            ClienteRN clienteRN = new ClienteRN();
             List<Cliente> lista = clienteRN.listar();
             
             assertEquals(5, lista.size());
    }
    
    @Test
    public void excluirTest(){
            ClienteRN clienteRN = new ClienteRN();
            
            List<Cliente> lista = clienteRN.listar();
            
            Cliente clienteExcluido = lista.get(0);
            
            clienteRN.excluir(clienteExcluido);
            
            lista = clienteRN.listar();
            
            assertEquals(4, lista.size());
            
    }
    
    @Test
    public void pesquisarTest(){
            ClienteRN clienteRN = new ClienteRN();
            Cliente clientePesquisado =  clienteRN.pesquisar("Edi");
            
            assertEquals("edinei@gmail.com", clientePesquisado.getEmail());

    }
    @Test
    public void alterarTest(){
            
            ClienteRN clienteRN = new ClienteRN();
            Cliente clientePesquisado =  clienteRN.pesquisar("Rob");
            
            assertEquals("teste@gmail.com", clientePesquisado.getEmail());
            
            clientePesquisado.setEndereco("QR 113 CONJ C CASA 3");
            
            clienteRN.alterar(clientePesquisado);
            
            Cliente clienteAlterado = clienteRN.pesquisar("Man");
            
            assertEquals("QR 113 CONJ C CASA 3", clienteAlterado.getEndereco());
            
    }
}
